home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / intuisup.lha / Intuisup / source.lha / Requester / requester_test.c < prev    next >
C/C++ Source or Header  |  1992-07-28  |  11KB  |  337 lines

  1. /* $Revision Header *** Header built automatically - do not edit! ***********
  2.  *
  3.  *    (C) Copyright 1991 by Torsten Jürgeleit
  4.  *
  5.  *    Name .....: requester_test.c
  6.  *    Created ..: Thursday 19-Dec-91 18:55:29
  7.  *    Revision .: 2
  8.  *
  9.  *    Date        Author                 Comment
  10.  *    =========   ====================   ====================
  11.  *    11-Jul-92   Torsten Jürgeleit      now get pointer to console device
  12.  *    30-Apr-92   Torsten Jürgeleit      now requester support rasters
  13.  *    19-Dec-91   Torsten Jürgeleit      Created this file!
  14.  *
  15.  ****************************************************************************
  16.  *
  17.  *    Test of requester support functions
  18.  *
  19.  * $Revision Header ********************************************************/
  20.  
  21.     /* Includes */
  22.  
  23. #include <exec/types.h>
  24. #include <graphics/gfxbase.h>
  25. #include <graphics/text.h>
  26. #include <intuition/intuitionbase.h>
  27. #include <intuition/intuition.h>
  28. #ifdef AZTEC_C
  29. #include <functions.h>   /* needed for Aztec C - prototypes and pragmas for all Amiga system functions */
  30. #endif
  31. #include <libraries/memwatch.h>   /* header file for memory debug link library (Fish 240) - AFTER functions.h */
  32. #include "/render/render.h"
  33. #include "/texts/texts.h"
  34. #include "/borders/borders.h"
  35. #include "/gadgets/gadgets.h"
  36. #include "requester.h"
  37.  
  38.     /* Defines */
  39.  
  40. #define WINDOW_WIDTH        600
  41. #define WINDOW_HEIGHT        180
  42. #define WINDOW_IDCMP        (CLOSEWINDOW | GADGET_IDCMP_FLAGS_BUTTON)
  43. #define WINDOW_FLAGS        (WINDOWCLOSE | WINDOWDRAG | WINDOWDEPTH | SMART_REFRESH | NOCAREREFRESH | RMBTRAP | ACTIVATE)
  44. #define WINDOW_TITLE        (UBYTE *)" Requester test "
  45.  
  46. #define RENDER_INFO_FLAGS    (USHORT)(RENDER_INFO_FLAG_INNER_WINDOW | RENDER_INFO_FLAG_BACK_FILL)
  47. #define OPEN_WINDOW_FLAGS    OPEN_WINDOW_FLAG_CENTER_SCREEN
  48.  
  49.     /* Globals */
  50.  
  51. struct IntuitionBase  *IntuitionBase;
  52. struct GfxBase        *GfxBase;
  53. struct Library        *DiskfontBase;
  54. struct Library        *LayersBase;
  55. struct Device         *ConsoleDevice;
  56.  
  57.     /* Statics */
  58.  
  59. STATIC struct NewWindow  test_new_window = {
  60.    0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0, 1, WINDOW_IDCMP, WINDOW_FLAGS,
  61.    NULL, NULL, WINDOW_TITLE, NULL, NULL, 0, 0, 0, 0, WBENCHSCREEN
  62. };
  63. STATIC struct TextAttr  topaz60_attr = { (STRPTR)"topaz.font", TOPAZ_SIXTY,
  64.                            FS_NORMAL, FPF_ROMFONT },
  65.             topaz80_attr = { (STRPTR)"topaz.font", TOPAZ_EIGHTY,
  66.                            FS_NORMAL, FPF_ROMFONT };
  67.     /* Defines for test gadgets */
  68.  
  69. #define TEST1_GADGET_AUTO_REQUEST    0
  70. #define TEST1_GADGET_REQUESTER        1
  71.  
  72. #define TEST1_GADGET1_TYPE        GADGET_DATA_TYPE_BUTTON
  73. #define TEST1_GADGET1_FLAGS        GADGET_DATA_FLAG_HOTKEY
  74. #define TEST1_GADGET1_LEFT_EDGE        ((WINDOW_WIDTH / 2 - TEST1_GADGET1_WIDTH) / 2)
  75. #define TEST1_GADGET1_TOP_EDGE        ((WINDOW_HEIGHT - TEST1_GADGET1_HEIGHT) / 2)
  76. #define TEST1_GADGET1_WIDTH        ((12 + 2) * 10)
  77. #define TEST1_GADGET1_HEIGHT        19
  78. #define TEST1_GADGET1_TEXT        "_Auto Request"
  79. #define TEST1_GADGET1_TEXT_ATTR        &topaz60_attr
  80.  
  81. #define TEST1_GADGET2_TYPE        GADGET_DATA_TYPE_BUTTON
  82. #define TEST1_GADGET2_FLAGS        GADGET_DATA_FLAG_HOTKEY
  83. #define TEST1_GADGET2_LEFT_EDGE        (WINDOW_WIDTH - (TEST1_GADGET2_WIDTH + TEST1_GADGET1_LEFT_EDGE))
  84. #define TEST1_GADGET2_TOP_EDGE        TEST1_GADGET1_TOP_EDGE
  85. #define TEST1_GADGET2_WIDTH        TEST1_GADGET1_WIDTH
  86. #define TEST1_GADGET2_HEIGHT        TEST1_GADGET1_HEIGHT
  87. #define TEST1_GADGET2_TEXT        "_Requester"
  88. #define TEST1_GADGET2_TEXT_ATTR        TEST1_GADGET1_TEXT_ATTR
  89.  
  90. STATIC struct GadgetData  test1_gadget_data[] = {
  91.    {
  92.     TEST1_GADGET1_TYPE,        /* gd_Type */
  93.     TEST1_GADGET1_FLAGS,        /* gd_Flags */
  94.     TEST1_GADGET1_LEFT_EDGE,    /* gd_LeftEdge */
  95.     TEST1_GADGET1_TOP_EDGE,        /* gd_TopEdge */
  96.     TEST1_GADGET1_WIDTH,        /* gd_Width */
  97.     TEST1_GADGET1_HEIGHT,        /* gd_Height */
  98.     TEST1_GADGET1_TEXT,        /* *gd_Text */
  99.     TEST1_GADGET1_TEXT_ATTR,    /* *gd_TextAttr */
  100.     { 0, 0, 0 }
  101.    }, {
  102.     TEST1_GADGET2_TYPE,        /* gd_Type */
  103.     TEST1_GADGET2_FLAGS,        /* gd_Flags */
  104.     TEST1_GADGET2_LEFT_EDGE,    /* gd_LeftEdge */
  105.     TEST1_GADGET2_TOP_EDGE,        /* gd_TopEdge */
  106.     TEST1_GADGET2_WIDTH,        /* gd_Width */
  107.     TEST1_GADGET2_HEIGHT,        /* gd_Height */
  108.     TEST1_GADGET2_TEXT,        /* *gd_Text */
  109.     TEST1_GADGET2_TEXT_ATTR,    /* *gd_TextAttr */
  110.     { 0, 0, 0 }
  111.    }, {
  112.     INTUISUP_DATA_END        /* mark end of border data array */
  113.    }
  114. };
  115.     /* Defines for auto request */
  116.  
  117. #define TEST1_AUTO_REQ_TITLE        " Auto Request "
  118. #define TEST1_AUTO_REQ_BODY_TEXT    "Test line 1\\n\\nTest line 2\\nTest line 3\\n\\nTest line 4"
  119. #define TEST1_AUTO_REQ_POS_TEXT        "_Positive"
  120. #define TEST1_AUTO_REQ_NEG_TEXT        "_Negative"
  121. #define TEST1_AUTO_REQ_FLAGS        (AUTO_REQ_FLAG_BACK_FILL | AUTO_REQ_FLAG_TEXT_CENTER | AUTO_REQ_FLAG_TEXT_COLOR2 | AUTO_REQ_FLAG_HOTKEY | AUTO_REQ_FLAG_CENTER_MOUSE | AUTO_REQ_FLAG_DRAW_RASTER)
  122.  
  123.     /* Defines for requester */
  124.  
  125. #define TEST2_REQ_WIDTH        200
  126. #define TEST2_REQ_HEIGHT    100
  127. #define TEST2_REQ_FLAGS        (REQ_DATA_FLAG_BACK_FILL | REQ_DATA_FLAG_CENTER_WINDOW | REQ_DATA_FLAG_INNER_WINDOW)
  128. #define TEST2_REQ_TITLE        " Requester "
  129.  
  130. #define TEST2_TEXT1_TYPE    TEXT_DATA_TYPE_TEXT
  131. #define TEST2_TEXT1_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_BOLD)
  132. #define TEST2_TEXT1_LEFT_EDGE    0
  133. #define TEST2_TEXT1_TOP_EDGE    20
  134. #define TEST2_TEXT1_TEXT    "Text Line 1"
  135. #define TEST2_TEXT1_TEXT_ATTR    &topaz60_attr
  136.  
  137. #define TEST2_TEXT2_TYPE    TEXT_DATA_TYPE_TEXT
  138. #define TEST2_TEXT2_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_ITALIC | TEXT_DATA_FLAG_COLOR2)
  139. #define TEST2_TEXT2_LEFT_EDGE    0
  140. #define TEST2_TEXT2_TOP_EDGE    (TEST2_TEXT1_TOP_EDGE + 10)
  141. #define TEST2_TEXT2_TEXT    "Text Line 2"
  142. #define TEST2_TEXT2_TEXT_ATTR    &topaz80_attr
  143.  
  144. #define TEST2_TEXT3_TYPE    TEXT_DATA_TYPE_TEXT
  145. #define TEST2_TEXT3_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_UNDERLINED)
  146. #define TEST2_TEXT3_LEFT_EDGE    0
  147. #define TEST2_TEXT3_TOP_EDGE    (TEST2_TEXT2_TOP_EDGE + 10)
  148. #define TEST2_TEXT3_TEXT    "Text Line 3"
  149. #define TEST2_TEXT3_TEXT_ATTR    &topaz80_attr
  150.  
  151. #define TEST2_BORDER1_TYPE        BORDER_DATA_TYPE_BOX2_OUT
  152. #define TEST2_BORDER1_LEFT_EDGE        20
  153. #define TEST2_BORDER1_TOP_EDGE        10
  154. #define TEST2_BORDER1_WIDTH        (TEST2_REQ_WIDTH - 2 * TEST2_BORDER1_LEFT_EDGE)
  155. #define TEST2_BORDER1_HEIGHT        (TEST2_REQ_HEIGHT - (3 * TEST2_BORDER1_TOP_EDGE + TEST2_GADGET1_HEIGHT))
  156.  
  157. #define TEST2_GADGET_CONTINUE        0
  158.  
  159. #define TEST2_GADGET1_TYPE        GADGET_DATA_TYPE_BUTTON
  160. #define TEST2_GADGET1_FLAGS        (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_MOVE_POINTER)
  161. #define TEST2_GADGET1_LEFT_EDGE        ((TEST2_REQ_WIDTH - TEST2_GADGET1_WIDTH) / 2)
  162. #define TEST2_GADGET1_TOP_EDGE        (TEST2_REQ_HEIGHT - (TEST2_GADGET1_HEIGHT + 10))
  163. #define TEST2_GADGET1_WIDTH        ((8 + 2) * 10)
  164. #define TEST2_GADGET1_HEIGHT        19
  165. #define TEST2_GADGET1_TEXT        "_Continue"
  166. #define TEST2_GADGET1_TEXT_ATTR        &topaz60_attr
  167.  
  168.     /* Statics for test borders */
  169.  
  170. STATIC struct TextData  test2_text_data[] = {
  171.    {
  172.     TEST2_TEXT1_TYPE,    /* td_Type */
  173.     TEST2_TEXT1_FLAGS,    /* td_Flags */
  174.     TEST2_TEXT1_LEFT_EDGE,    /* td_LeftEdge */
  175.     TEST2_TEXT1_TOP_EDGE,    /* td_TopEdge */
  176.     TEST2_TEXT1_TEXT,    /* *td_Text */
  177.     TEST2_TEXT1_TEXT_ATTR    /* *td_TextAttr */
  178.    }, {
  179.     TEST2_TEXT2_TYPE,    /* td_Type */
  180.     TEST2_TEXT2_FLAGS,    /* td_Flags */
  181.     TEST2_TEXT2_LEFT_EDGE,    /* td_LeftEdge */
  182.     TEST2_TEXT2_TOP_EDGE,    /* td_TopEdge */
  183.     TEST2_TEXT2_TEXT,    /* *td_Text */
  184.     TEST2_TEXT2_TEXT_ATTR    /* *td_TextAttr */
  185.    }, {
  186.     TEST2_TEXT3_TYPE,    /* td_Type */
  187.     TEST2_TEXT3_FLAGS,    /* td_Flags */
  188.     TEST2_TEXT3_LEFT_EDGE,    /* td_LeftEdge */
  189.     TEST2_TEXT3_TOP_EDGE,    /* td_TopEdge */
  190.     TEST2_TEXT3_TEXT,    /* *td_Text */
  191.     TEST2_TEXT3_TEXT_ATTR    /* *td_TextAttr */
  192.    }, {
  193.     INTUISUP_DATA_END        /* mark end of border data array */
  194.    }
  195. };
  196. STATIC struct BorderData  test2_border_data[] = {
  197.    {
  198.     TEST2_BORDER1_TYPE,        /* bd_Type */
  199.     TEST2_BORDER1_LEFT_EDGE,    /* bd_LeftEdge */
  200.     TEST2_BORDER1_TOP_EDGE,        /* bd_TopEdge */
  201.     TEST2_BORDER1_WIDTH,        /* bd_Width */
  202.     TEST2_BORDER1_HEIGHT        /* bd_Height */
  203.    }, {
  204.     INTUISUP_DATA_END        /* mark end of border data array */
  205.    }
  206. };
  207. STATIC struct GadgetData  test2_gadget_data[] = {
  208.    {
  209.     TEST2_GADGET1_TYPE,        /* gd_Type */
  210.     TEST2_GADGET1_FLAGS,        /* gd_Flags */
  211.     TEST2_GADGET1_LEFT_EDGE,    /* gd_LeftEdge */
  212.     TEST2_GADGET1_TOP_EDGE,        /* gd_TopEdge */
  213.     TEST2_GADGET1_WIDTH,        /* gd_Width */
  214.     TEST2_GADGET1_HEIGHT,        /* gd_Height */
  215.     TEST2_GADGET1_TEXT,        /* *gd_Text */
  216.     TEST2_GADGET1_TEXT_ATTR,    /* *gd_TextAttr */
  217.     { 0, 0, 0 }
  218.    }, {
  219.     INTUISUP_DATA_END        /* mark end of border data array */
  220.    }
  221. };
  222. STATIC struct RequesterData  test2_requester_data = {
  223.     0,            /* rd_LeftEdge */
  224.     0,            /* rd_TopEdge */
  225.     TEST2_REQ_WIDTH,    /* rd_Width */
  226.     TEST2_REQ_HEIGHT,    /* rd_Height */
  227.     TEST2_REQ_FLAGS,    /* rd_Flags */
  228.     TEST2_REQ_TITLE,    /* *rd_Title */
  229.     &test2_text_data[0],    /* *rd_Texts */
  230.     &test2_border_data[0],    /* *rd_Borders */
  231.     &test2_gadget_data[0]    /* *rd_Gadgets */
  232. };
  233.     /* Prototypes */
  234.  
  235. VOID test_action(struct RenderInfo  *ri, struct Window  *win,
  236.                             struct GadgetList  *gl);
  237.     /* Pragmas */
  238.  
  239. #pragma regcall(test_action(a0,a1,a2))
  240.  
  241.     /* Requester test */
  242.  
  243.    LONG
  244. main(VOID)
  245. {
  246.    struct IOStdReq    io;
  247.    struct RenderInfo  *ri;
  248.    struct Window      *win;
  249.    struct GadgetList  *gl;
  250.  
  251.    MWInit((BPTR)NULL, 0L);
  252.    if (IntuitionBase = OpenLibrary("intuition.library", 0L)) {
  253.       if (GfxBase = OpenLibrary("graphics.library", 0L)) {
  254.      if (DiskfontBase = OpenLibrary("diskfont.library", 0L)) {
  255.         if (LayersBase = OpenLibrary("layers.library", 0L)) {
  256.            if (!OpenDevice("console.device", -1L,
  257.                          (struct IORequest *)&io, 0L)) {
  258.           ConsoleDevice = io.io_Device;
  259.           if (ri = get_render_info(NULL, RENDER_INFO_FLAGS)) {
  260.              if (win = open_window(ri, &test_new_window,
  261.                                OPEN_WINDOW_FLAGS)) {
  262.             if (gl = create_gadgets(ri, &test1_gadget_data[0],
  263.                                   0, 0, NULL)) {
  264.                display_gadgets(win, gl);
  265.                test_action(ri, win, gl);
  266.                remove_gadgets(gl);
  267.                free_gadgets(gl);
  268.             }
  269.             close_window(win, FALSE);
  270.              }
  271.              free_render_info(ri);
  272.           }
  273.           CloseDevice((struct IORequest *)&io);
  274.            }
  275.            CloseLibrary(LayersBase);
  276.         }
  277.         CloseLibrary(DiskfontBase);
  278.      }
  279.      CloseLibrary(GfxBase);
  280.       }
  281.       CloseLibrary(IntuitionBase);
  282.    }
  283.    MWTerm();
  284.    return(0L);
  285. }
  286.     /* Perform IDCMP action */
  287.  
  288.    VOID
  289. test_action(struct RenderInfo  *ri, struct Window  *win,
  290.                              struct GadgetList  *gl)
  291. {
  292.    struct MsgPort  *up = win->UserPort;
  293.    BOOL keepon2 = TRUE;
  294.  
  295.    do {
  296.       struct IntuiMessage   *msg2;
  297.       struct RequesterList  *rl;
  298.  
  299.       WaitPort(up);
  300.       while (msg2 = get_msg(up)) {
  301.      switch (msg2->Class) {
  302.         case CLOSEWINDOW :
  303.            keepon2 = FALSE;
  304.            break;
  305.  
  306.         case ISUP_ID :
  307.            if (msg2->Code == TEST1_GADGET_AUTO_REQUEST) {
  308.           auto_request(win, TEST1_AUTO_REQ_TITLE,
  309.               TEST1_AUTO_REQ_BODY_TEXT, TEST1_AUTO_REQ_POS_TEXT,
  310.                         TEST1_AUTO_REQ_NEG_TEXT, 0L, 0L,
  311.                         TEST1_AUTO_REQ_FLAGS, NULL);
  312.            } else {
  313.           if (rl = display_requester(win, &test2_requester_data,
  314.                                     NULL)) {
  315.              BOOL keepon1 = TRUE;
  316.  
  317.              do {
  318.                 struct IntuiMessage  *msg1;
  319.  
  320.             WaitPort(up);
  321.             while (msg1 = get_msg(up)) {
  322.                if (msg1->Class == ISUP_ID) {
  323.                   keepon1 = FALSE;
  324.                }
  325.                reply_msg(msg1);
  326.             }
  327.              } while (keepon1 == TRUE);
  328.              remove_requester(rl);
  329.           }
  330.            }
  331.            break;
  332.      }
  333.      reply_msg(msg2);
  334.       }
  335.    } while (keepon2 == TRUE);
  336. }
  337.